/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.iiit.quarkus.sample.gof23;

import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import com.iiit.quarkus.sample.gof23.creationalpattern.factorymethod.FactorymethodClient;
import com.iiit.quarkus.sample.gof23.creationalpattern.abstractfactory.AbstractfactoryClient;
import com.iiit.quarkus.sample.gof23.creationalpattern.builder.BuilderClient;
import com.iiit.quarkus.sample.gof23.creationalpattern.prototype.PrototypeClient;
import com.iiit.quarkus.sample.gof23.creationalpattern.singleton.SingletonClient;

@Path("/gof23")
public class Gof23CreationalPatternSource {

	@Inject
	FactorymethodClient factorymethodClient;

	@Inject
	AbstractfactoryClient abstractfactoryClient;

	@Inject
	BuilderClient builderClient;

	@Inject
	PrototypeClient prototypeClient;

	@Inject
	SingletonClient singletonClient;

	public Gof23CreationalPatternSource() {
	}

	@GET
	@Path("/factorymethod")
	@Produces(MediaType.TEXT_PLAIN)
	public String factorymethodClient() {
		factorymethodClient.run("factorymethod");
		return "factorymethod is running OK;";
	}

	@GET
	@Path("/abstractfactory")
	@Produces(MediaType.TEXT_PLAIN)
	public String abstractfactoryClient() {
		abstractfactoryClient.run("Abstractfactory");
		return "abstractfactory is running OK;";
	}
	
	@GET
	@Path("/builder")
	@Produces(MediaType.TEXT_PLAIN)
	public String builderClient() {
		builderClient.run("builderClient");
		return "builder is running OK;";
	}
	
	@GET
	@Path("/prototype")
	@Produces(MediaType.TEXT_PLAIN)
	public String prototypeClient() {
		prototypeClient.run("prototypeClient");
		return "prototype is running OK;";
	}
	
	@GET
	@Path("/singleton")
	@Produces(MediaType.TEXT_PLAIN)
	public String singletonClient() {
		singletonClient.run("singletonClient");
		return "singleton is running OK;";
	}	

}